// api/menu.js
import request from "../utils/request";


/**
 * 获取用户自己创建的菜谱列表
 * @returns {Promise} - 用户菜谱列表数据
 */
export function getUserRecipes() {
  return request({
    url: '/recipes/user/recipes',
    method: 'GET'
  });
}

/**
 * 分类标签tag 
 * /categories
 */
export function getMenuTags() {
	return request({
		url:`/categories`,
		method:"GET",
		showLoading: false
	})
}

/**
 * 菜单列表接口（支持分页和筛选）
 * @param {Object} params - 查询参数（page: 页码, size: 每页条数, category: 菜品分类）
 * @returns {Promise} - 菜单列表数据
 */
export function getMenuList(params) {
  return request({
    url: "/recipes",
    method: "GET",
    params: params,
    showLoading: false
  });
}

/**
 * 菜单详情接口
 * @param {Number} menuId - 菜品ID
 * @returns {Promise} - 菜品详情数据
 */
export function getMenuDetail(menuId) {
  return request({
    url: `/recipes/${menuId}`, // 与后端路由保持一致
    method: "GET",
    showLoading: false
  });
}

/**
 * 点赞菜谱
 * @param {Number} userId - 用户ID
 * @param {Number} recipeId - 菜谱ID
 * @returns {Promise} - 操作结果
 */
export function likeRecipe(userId, recipeId) {
  // 验证并转换参数为整数
  const userIdInt = parseInt(userId);
  const recipeIdInt = parseInt(recipeId);
  
  // 验证参数有效性
  if (isNaN(userIdInt) || isNaN(recipeIdInt) || userIdInt < 1 || recipeIdInt < 1) {
    return Promise.reject(new Error('无效的参数'));
  }
  
  return request({
    url: "/likes/", // 添加斜杠避免308重定向
    method: "POST",
    data: {
      user_id: userIdInt,
      recipe_id: recipeIdInt
    },
    showLoading: false
  }).then(response => {
    // 确保返回完整的响应对象，包括状态码和数据
    return response;
  }).catch(error => {
    // 抛出原始错误，让调用方处理
    throw error;
  });
}

/**
 * 取消点赞菜谱
 * @param {Number} likeId - 点赞记录ID
 * @returns {Promise} - 操作结果
 */
export function unlikeRecipe(likeId) {
  return request({
    url: `/likes/${likeId}`,
    method: "DELETE",
    showLoading: false
  }).then(response => {
    // 确保返回完整的响应对象
    return response;
  }).catch(error => {
    throw error;
  });
}

/**
 * 收藏菜谱
 * @param {Number} userId - 用户ID
 * @param {Number} recipeId - 菜谱ID
 * @returns {Promise} - 操作结果
 */
export function favoriteRecipe(userId, recipeId) {
  // 验证并转换参数为整数
  const userIdInt = parseInt(userId);
  const recipeIdInt = parseInt(recipeId);
  
  // 验证参数有效性
  if (isNaN(userIdInt) || isNaN(recipeIdInt) || userIdInt < 1 || recipeIdInt < 1) {
    return Promise.reject(new Error('无效的参数'));
  }
  
  return request({
    url: "/favorites/", // 添加斜杠避免308重定向
    method: "POST",
    data: {
      user_id: userIdInt,
      recipe_id: recipeIdInt
    },
    showLoading: false
  }).then(response => {
    // 确保返回完整的响应对象，包括状态码和数据
    return response;
  }).catch(error => {
    // 抛出原始错误，让调用方处理
    throw error;
  });
}

/**
 * 取消收藏菜谱
 * @param {Number} userId - 用户ID
 * @param {Number} recipeId - 菜谱ID
 * @returns {Promise} - 操作结果
 */
export function unfavoriteRecipe(userId, recipeId) {
  return request({
    url: "/favorites/remove",
    method: "DELETE",
    data: {
      user_id: userId,
      recipe_id: recipeId
    },
    showLoading: false
  }).then(response => {
    // 确保返回完整的响应对象
    return response;
  }).catch(error => {
    throw error;
  });
}

/**
 * 检查用户是否已点赞菜谱
 * @param {Number} userId - 用户ID
 * @param {Number} recipeId - 菜谱ID
 * @returns {Promise} - 点赞状态
 */
export function checkLikeStatus(userId, recipeId) {
  // 验证参数有效性
  if (!userId || !recipeId || typeof userId !== 'number' || typeof recipeId !== 'number') {
    return Promise.resolve({ is_liked: false, like_id: null });
  }
  
  return request({
    url: `/likes/check`,
    method: "GET",
    params: {
      user_id: userId,
      recipe_id: recipeId
    },
    showLoading: false
  }).then(response => {
    // 直接返回响应数据，保持与后端一致的格式
    return response;
  }).catch(error => {
    return { is_liked: false, like_id: null };
  });
}

/**
 * 检查用户是否已收藏菜谱
 * @param {Number} userId - 用户ID
 * @param {Number} recipeId - 菜谱ID
 * @returns {Promise} - 收藏状态
 */
export function checkFavoriteStatus(userId, recipeId) {
  // 验证参数有效性
  if (!userId || !recipeId || typeof userId !== 'number' || typeof recipeId !== 'number') {
    return Promise.resolve({ is_favorited: false });
  }
  
  return request({
    url: `/favorites/check`,
    method: "GET",
    params: {
      user_id: userId,
      recipe_id: recipeId
    },
    showLoading: false
  }).then(response => {
    // 直接返回响应数据，保持与后端一致的格式
    return response;
  }).catch(error => {
    return { is_favorited: false };
  });
}

/**
 * 获取菜谱点赞数量
 * @param {Number} recipeId - 菜谱ID
 * @returns {Promise} - 点赞数量
 */
export function getRecipeLikeCount(recipeId) {
  return request({
    url: `/likes/count/${recipeId}`,
    method: "GET",
    showLoading: false,
    transformResponse: [function (data) {
      // 转换响应格式，使其符合前端预期
      const response = JSON.parse(data);
      return {
        count: response.like_count || 0
      };
    }]
  });
}

/**
 * 获取菜谱收藏数量
 * @param {Number} recipeId - 菜谱ID
 * @returns {Promise} - 收藏数量
 */
export function getRecipeFavoriteCount(recipeId) {
  return request({
    url: `/favorites/recipe/${recipeId}/count`,
    method: "GET",
    showLoading: false
  });
}

